#pragma once

#include "mccommonapi.h"
#include <string>

namespace MCCommon
{

class MCAPI IMCSettingValue
{
public:
    enum ValueType
    {
        kVT_Bool,
        kVT_Integer,
        kVT_Double,
        kVT_String,
        kVT_Vector,
        kVT_SettingList
    };

    /**
     * Destructor.
     * 
     */
    virtual ~IMCSettingValue(){};

    /**
     * Get value type.
     * 
     */
    virtual ValueType GetValueType() const = 0;

    /**
     * Create a new object of value.
     * 
     */
    virtual IMCSettingValue* Clone() const = 0;

    /**
     * Get bool
     * 
     */
    virtual bool GetBool() const = 0;

    /**
     * Get integer.
     * 
     */
    virtual int GetInt() const = 0;

    /**
     * Get double.
     * 
     */
    virtual double GetDouble() const = 0;

    /**
     * Get string.
     * 
     */
    virtual std::string GetString() const = 0;  
};

} // end of namespace MCCommon.